The present invention relates generally to computer program compiling and debugging, and more specifically to an automated system for determining the file or set of files that cause a program run-time failure and/or performance problem when complied with a particular compiler, or compiled in a particular manner.
The need for computer programs with greater functionality is increasing dramatically and with added functionality of computer programs comes added complexity. It is not uncommon today for a computer program to contain hundreds or even thousands of source code files. Computer program compilers are used to transform these source code files to machine-readable files (e.g., executable files). There are many varieties of compilers available for different languages and from different manufacturers. Often times a computer programmer may wish to take a set of source code files already compiled on one type of compiler and compile the same source code files on another interoperable compiler. This may be desirable to realize the benefit of some advantage which one compiler has over another, for example greater speed or additional optimization features.
A computer programmer may find that the set of source code files that compiles and runs successfully using one compiler may not execute properly when compiled with another one. That is, the executable program produced using one compiler runs fine and the executable program produced using another compiler crashes for the same set of source code files. Alternatively, the programmer may find that the set of source files compiles using one set of compilation options and does not compile with a different set of options. Typically the problem is caused by one source code file or the interaction of two or more source code files. The vast majority of the source code files will usually present no difficulty using either of the two interoperable compilers. The problem may be due to the source code itself or some unknown deficiency in the compiler. It may be possible and desirable to compile all of the source code files except the problematic file(s) on a preferred compiler and compile the problematic file(s) using a compiling environment that does not cause a problem.
To do this a computer programmer may need to determine which source code file or set of files is problematic. This process typically involves creating test executable programs made up of some source code files compiled using the functioning compiling environment and some source code files compiled using the problematic compiling environment and determining if the produced executable file runs properly. Through iterations of this process the computer programmer may be able to isolate the problematic source code file(s). This process requires a great deal of effort on the part of the computer programmer. The computer programmer must decide which set of files will be used to construct the test executable program and must determine if the test executable program experiences a failure or degradation in performance. The computer programmer, typically, may monitor the evaluation process and make decisions for each iteration of the debugging process.